home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 17 / CU Amiga Magazine's Super CD-ROM 17 (1997)(EMAP Images)(GB)[!][issue 1997-12].iso / CUCD / Programming / DiceSource / lib / extra / unixpath.c < prev    next >
C/C++ Source or Header  |  1997-09-09  |  1KB  |  89 lines

  1.  
  2. /*
  3.  *  EXTRA/UNIXPATH.C
  4.  *
  5.  *    (c)Copyright 1992-1997 Obvious Implementations Corp.  Redistribution and
  6.  *    use is allowed under the terms of the DICE-LICENSE FILE,
  7.  *    DICE-LICENSE.TXT.
  8.  */
  9.  
  10. #include <stdio.h>
  11. #include <string.h>
  12. #include <lib/unix.h>
  13.  
  14. static char Buf[4][512];
  15. static short Cnt;
  16.  
  17. char *
  18. UnixToAmigaPath(name)
  19. char *name;
  20. {
  21.     short i;
  22.     char *buf = Buf[Cnt];
  23.  
  24.     Cnt = (Cnt + 1) & 3;
  25.  
  26.     i = 0;
  27.  
  28.     if (name[0] == '/') {
  29.     short j;
  30.     for (j = 1; name[j] && name[j] != '/'; ++j)
  31.         buf[i++] = name[j];
  32.     buf[i++] = ':';
  33.     name += j;
  34.     if (*name == '/')
  35.         ++name;
  36.     }
  37.  
  38.     while (*name && i < sizeof(Buf[0]) - 4) {
  39.     if (name[0] == '.') {
  40.         if (name[1] == '/') {
  41.         name += 2;
  42.         continue;
  43.         }
  44.         if (name[1] == '\0') {
  45.         name += 1;
  46.         continue;
  47.         }
  48.         if (name[1] == '.') {
  49.         if (name[2] == '/') {
  50.             name += 3;
  51.             buf[i++] = '/';
  52.             continue;
  53.         }
  54.         if (name[2] == '\0') {
  55.             name += 2;
  56.             buf[i++] = '/';
  57.             continue;
  58.         }
  59.         }
  60.     }
  61.     buf[i++] = *name;
  62.     ++name;
  63.     }
  64.     buf[i] = 0;
  65.     return(buf);
  66. }
  67.  
  68. char *
  69. AmigaToUnixPath(name)
  70. char *name;
  71. {
  72.     short i = 0;
  73.     char *buf = Buf[Cnt];
  74.  
  75.     Cnt = (Cnt + 1) & 3;
  76.  
  77.     while (*name == '/') {
  78.     i += sprintf(buf + i, "../");
  79.     ++name;
  80.     }
  81.     while (*name && i < sizeof(Buf[0]) - 4) {
  82.     buf[i++] = *name;
  83.     ++name;
  84.     }
  85.     buf[i] = 0;
  86.     return(buf);
  87. }
  88.  
  89.